﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Financeiro.Dados;
using Model.MedicoWS;
using Model.AdministracaoWS;

namespace Financeiro.Model
{
	public class BoletoBancarioModel
	{
        #region Fields
		//Parametros desse objeto.
        private int id;
        private int id_cliente;

        #endregion

        #region Properties
		//Métodos de Get e Set.
        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        public int IdCliente
        {
            get { return id_cliente; }
            set { id_cliente = value; }
        }

        #endregion

        #region Constructors
		//Construtores.
        public BoletoBancarioModel() {}

		public BoletoBancarioModel(int id, int id_cliente)
        {
            this.id = id;
            this.id_cliente = id_cliente;
        }

        #endregion

        #region Methods

        #endregion

        #region Static Methods

		//public static DataTable dadosEmpresa()
		//{
		//    return NotaFiscalDAO.dadosEmpresa();
		//}

		public static void testeFuturoWebService(int id_paciente, DateTime horario)
		{
			ERPMedicoDomainService ws_medico = new ERPMedicoDomainService();
			AdministracaoWS ws_adm = new AdministracaoWS();

			Atendimento[] atendimento_lista = ws_medico.GetAtendimento().RootResults;
			Exame[] exame_lista = ws_medico.GetExame().RootResults;
			List<Exame> exames_filtrados = new List<Exame>();
			
			int id_atendimento = -1;

			//Busca o ID de Atendimento.
			foreach (Atendimento atendimento in atendimento_lista)
			{
				if (id_paciente == atendimento.PacienteId && horario == atendimento.Horario)
				{
					id_atendimento = atendimento.Id;
					break;
				}
			}

			//Busca os exames relacionados com esse Atendimento.
			if (id_atendimento != -1)
			{
				foreach (Exame exame in exame_lista)
				{
					if (exame.AtendimentoId == id_atendimento)
					{
						exames_filtrados.Add(exame);
					}
				}

				//Cria uma nova conta.
				ContasModel nova_conta = new ContasModel(0, "Conta para Cliente", DateTime.Now, DateTime.Now.AddDays(30), 1);
				int id_conta = nova_conta.createConta(id_atendimento);

				PacienteModel paciente = new PacienteModel(id_paciente);

				DataTable data_table_servicos = ws_adm.ListaDescontosConvenios(paciente.Convenio + 25);

				//Temporário.
				//DataTable data_table_servicos = new DataTable();

				//data_table_servicos.Columns.Add("nome");
				//data_table_servicos.Columns.Add("ServicoMedicoSet_codigo");
				//data_table_servicos.Columns.Add("preco_desconto");
				//DataRow data_row_servicos = data_table_servicos.NewRow();
				//data_row_servicos["nome"] = "Diagnostico Tipo A";
				//data_row_servicos["ServicoMedicoSet_codigo"] = 555;
				//data_row_servicos["preco_desconto"] = 1102.5;
				//data_table_servicos.Rows.Add(data_row_servicos);

				foreach (Exame exame in exames_filtrados)
				{
					string servico = exame.Descricao;
					double valor_total = 0;
					foreach (DataRow row in data_table_servicos.Rows)
					{
						//if (String.Compare(row["nome"].ToString(), servico) == 0)
						//{
							int id_servico = Convert.ToInt32(row["ServicoMedicoSet_codigo"]);
							string descricao = row["nome"].ToString();
							double valor = Convert.ToDouble(row["preco_desconto"]);
							ContasDAO.insertContaServico(id_conta, id_servico, descricao, valor);
							valor_total += valor;
							ContasDAO.updateValor(id_conta, valor_total);
						//}
					}
					break;
				}
			}
			else
			{
				throw new Exception("Erro na criação do boleto bancário.");
			}
		}

        #endregion
	}
}
